package second.codeTop.package2;

import java.util.HashMap;

public class LC3 {
    public static void main(String[] args) {

    }

    //无重复字符的最长子串,最长子串与子序列的区别
    //滑动窗口法
    public static int lengthOfLongestSubstring(String s) {
        char[] array = s.toCharArray();
        //i-j+1就是这个窗口的大小，i/j指针指向窗口头尾
        int j = 0;
        int res = 0;
        HashMap<Character, Integer> map = new HashMap<>();
        for (int i=0; i<array.length; i++) {
            if (map.containsKey(array[i])) {
                //维护该滑动窗口最左边的指针
                j = Math.max(map.get(array[i])+1, j);
            }
            map.put(array[i], i);
            res = Math.max(i-j+1, res);
        }
        return res;
    }
}
